# -*- coding: utf-8 -*-
#   是QDataWidgetMapper的代理
#   包括 TimeEditBase（时间）、DateEditBase（日期）和 QDateTimeEdit（日期时间
#   确保所有时间/日期数据始终以固定格式（如 "HH:mm:ss" 和 "yyyy-MM-dd"）传递给QDataWidgetMapper
# @Time    ： 2025/7/11  11:50
# @Auther  ： 徐良
# File     :  dateTimeStringDelegate.py

from PySide6.QtCore import Qt, QTime, QDate, QDateTime
from PySide6.QtWidgets import QStyledItemDelegate, QDateTimeEdit
from mesParts.dateTime.dateTimes import TimeEdit, DateEdit, DateTimeEdit


class DateTimeStringDelegate(QStyledItemDelegate):
    def setEditorData(self, editor, index):
        """从模型加载数据到控件（字符串 → QTime/QDate/QDateTime）"""

        # 首先检查索引是否有效且有模型关联
        if not index.isValid():
            super().setEditorData(editor, index)
            return

        model = index.model()
        if model is None:
            super().setEditorData(editor, index)
            return

        data_str = index.model().data(index, Qt.ItemDataRole.EditRole)

        if isinstance(editor, TimeEdit):  # 时间控件
            if data_str:
                q_time = QTime.fromString(data_str, "HH:mm:ss")
                editor.setTime(q_time)

        elif isinstance(editor, DateEdit):  # 日期控件
            if data_str:
                q_date = QDate.fromString(data_str, "yyyy-MM-dd")
                editor.setDate(q_date)

        elif isinstance(editor, DateTimeEdit):  # 日期时间控件
            if data_str:
                q_datetime = QDateTime.fromString(data_str, "yyyy-MM-dd HH:mm:ss")
                editor.setDateTime(q_datetime)

        else:  # 其他控件使用默认处理
            super().setEditorData(editor, index)

    def setModelData(self, editor, model, index):
        """从控件保存数据到模型（QTime/QDate/QDateTime → 字符串）"""

        # 检查索引有效性
        if not index.isValid() or model is None:
            super().setModelData(editor, model, index)
            return

        if isinstance(editor, TimeEdit):  # 时间控件
            time_str = editor.time().toString("HH:mm:ss")
            model.setData(index, time_str, Qt.ItemDataRole.EditRole)

        elif isinstance(editor, DateEdit):  # 日期控件
            date_str = editor.date().toString("yyyy-MM-dd")
            model.setData(index, date_str, Qt.ItemDataRole.EditRole)

        elif isinstance(editor, DateTimeEdit):  # 日期时间控件
            datetime_str = editor.dateTime().toString("yyyy-MM-dd HH:mm:ss")
            model.setData(index, datetime_str, Qt.ItemDataRole.EditRole)

        else:  # 其他控件使用默认处理
            super().setModelData(editor, model, index)
